import axios, { AxiosRequestConfig, AxiosResponse } from 'axios'
import { start, close } from '@/utils/nprogress'
import { ElMessage } from 'element-plus'
const request = axios.create({
  baseURL: '/dev-api',
  timeout: 5000,
  headers: { 'X-Custom-Header': 'foobar' }
})
// 添加请求拦截器
request.interceptors.request.use(function (config:AxiosRequestConfig) {
  // 在发送请求之前做些什么
  // 统一设置用户身份 token
  start()
  return config
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error)
})

// 添加响应拦截器
request.interceptors.response.use(function (response:AxiosResponse) {
  // 对响应数据做点什么
  // 统一处理接口响应错误
  close()
  return response
}, function (error) {
  // 对响应错误做点什么
  close()
  ElMessage.error((error.message || '有错误') as string)
  return Promise.reject(error)
})

export default <T>(config:AxiosRequestConfig) => {
  return request(config).then(res => {
    return res.data as T
  })
}
